import '../bean/requesterror_bean.dart';
import '../model/optiontype_model.dart';
import '../utils/tools/errorhandle_tool.dart';
import '../utils/tools/localstorage_tool.dart';

class OptionTypeVM {

  Map allItem = { "code": 999, "name": "全部" };

  /// ### 分析告警类型基础数据
  /// #### [context] 必填|上下文
  analysisAlarmType(context) async {

    // 检测本地缓存中是否存有告警类型数据
    List alarmType = await LocalStorage.getStringListItem("alarmType");

    // 检查alarmType是否存在值，
    // true：存在则返回数据。
    // false：不存在则发起请求
    if(alarmType == null || alarmType == "") {
      return _reqAlamType(context);
    } else {
      return alarmType;
    }
  }

  /// 分析设备类型基础数据
  /// #### [context] 必填|上下文
  analysisDeviceType(context) async {
    // 检测本地缓存中是否存有设备类型数据
    List deviceType = await LocalStorage.getStringListItem("deviceType");

    // 检查deviceType是否存在值，
    // true：存在则返回数据。
    // false：不存在则发起请求
    if(deviceType == null || deviceType == ""){
      return _reqDeviceType(context);
    } else{
      return deviceType;
    }
  }


  /// ### 获取告警类型基础数据
  /// #### [context] 必填|上下文
  Future<List> _reqAlamType(context) async {
    try {
      // 获取告警类型
      List resAlarmType = await OptionTypeModel.reqAlarmStatus();

      // 将数据类型新增一条“全部”
      resAlarmType.insert(0, allItem);

      // 存储告警类型数据
      LocalStorage.setStringListItem("alarmType", resAlarmType);

      // 返回数据
      return resAlarmType;
    } on RequestErrorBean catch (e) {
      // 请求失败、错误统一处理
      errorHandle(context, e);
    }
  }

  /// ### 获取告警类型基础数据
  /// #### [context] 必填|上下文
  Future<List> _reqDeviceType(context) async {
    try {
      // 获取告警类型
      List resDeviceType = await OptionTypeModel.reqAlarmDeviceType();

      // 将数据类型新增一条“全部”
      resDeviceType.insert(0, allItem);

      // 存储告警类型数据
      LocalStorage.setStringListItem('deviceType', resDeviceType);

      return resDeviceType;
    } on RequestErrorBean catch (e) {
      // 请求失败、错误统一处理
      errorHandle(context, e);
    }
  }

}
